#ifndef  __COMBAT_DATA_HH___R_
#define  __COMBAT_DATA_HH___R_


#include "Combat/CombatSysImp.h"


//
//	ICombatSys for Role
//
class TCOM_API  CombatSysP : public CombatSysImp
{
public:
	CombatSysP();

	//
	//	Fire just after the gene is created, just override this function to have
	//	you specific gene initialize logic.
	//
	virtual bool onInit(IGeneCreateData& createData);


	//
	//	Calculator or Demonstrator
	virtual	bool isCalculator()const;

	//
	//	Spell to cast
	virtual bool TryCastNewSpell();

protected:
	//
	//	onEvent event handlers
	//
	virtual void onEvent_CastPrep(IEvt& evt);
	virtual void onEvent_Target(IEvt& evt);

#ifdef _DEBUG
	//
	//	Debug Helper Function
	virtual	const char*		getCombatTag()const;
#endif

protected:
	int	m_nExpForProps[Combat::CBP_End];

	struct SkillWithTarget 
	{
		SkillWithTarget( int nTarget, CombatSkill* pSkill)
			:m_nTargetID(nTarget), m_wpSkill(pSkill)
		{}

		int	m_nTargetID;
		CombatSkill*	m_wpSkill;
	};
	typedef std::list<SkillWithTarget>		SkillList;

	CombatSkill*							m_wpTheMainSkill;
	CombatSkill*							m_wpCurUntargetSkill;
	SkillList								m_thePendingAbilities;

};

#endif
